<?php
// $Id: roles_controller.php @2009 ccbox.net 1:22 2009-5-14 $

/**
 * Controller_Admin_Roles 控制器
 */
class Controller_Admin_Roles extends Controller_Abstract
{
    /* ******************************************************************** */
    function actionIndex()
    {
        $show_box['title'] = '角色管理首页';
        // 分页查询
        $page = intval($this->_context->page);
        if ($page < 1) $page = 1;
        // 构造查询对象
        $select = Admin_Roles::find();
        $select -> limitPage($page, 15);

        // 将分页信息和查询到的数据传递到视图
        $show_box['pagination']  = $select->getPagination();
        $show_box['roles']       = $select->getAll();
        $this->_view['show_box'] = $show_box;
    }

    /* ******************************************************************** */
    function actionAdd()
    {
        $show_box['title'] = '添加角色';
        // 构造表单对象
        $show_box['form'] = new Form_RoleForm(url('admin::roles/add'));
        $show_box['form']->_subject = $show_box['title'];
        if ($this->_context->isPOST() && $show_box['form']->validate($_POST))
        {
            try
            {
                //创建 User 对象并保存
                $db_one = new Admin_Roles($show_box['form']->values());
                //*************************测试*******************************
                //$test_arr = $db_one->toArray();
                //print_r($test_arr);
                //**************************************************************
                $db_one->save();
                return $this->_redirectMessage(
                    '添加角色成功', 
                    '新的角色已经添加成功，请绑定相关权限。',
                    url('admin::roles/index'));
            }
            catch (QValidator_ValidateFailedException $ex)
            {
                $show_box['form']->invalidate($ex);
            }
        }
        // 将表单对象传递给视图
        $this->_view['show_box'] = $show_box;
        $this->_viewname = 'form';
    }

    /* ******************************************************************** */
    function actionView()
    {
        $show_box['title'] = '角色详细信息';
        // 查询指定用户 ID
        $show_box['role_info'] = Admin_Roles::find('role_id = ?', $this->_context->role_id )->query();
        if ( !$show_box['role_info'] -> id() )
        { // 如果用户 ID 无效，则返回用户管理首页
            return $this->_redirect(url('admin::roles/index'));
        }
        $this->_view['show_box'] = $show_box;
    }

# role_id rolename description user_owned group_owned
    /* ******************************************************************** */
    function actionEdit()
    {
        $show_box['title'] = '修改角色';
        // 查询指定 ID
        $db_one = Admin_Roles::find('role_id = ?', $this->_context->role_id )->query();
        if ( !$db_one->id() )
        { // 如果用户 ID 无效，则返回
            return $this->_redirect(url('admin::roles/index'));
        }
        // 构造表单对象
        $show_box['form'] = $form = new Form_RoleForm(url('admin::roles/edit'));
        $show_box['form']->_subject = $show_box['title'];
        if ($this->_context->isPOST() && $show_box['form'] -> validate($_POST))
        {
            try{
                // changeProps() 方法可以批量修改  对象的属性，但不会修改只读属性的值
                $db_one->changeProps($show_box['form']->values());
                $db_one->save();
                return $this->_redirect(url('admin::roles/index'));
            }
            catch (QValidator_ValidateFailedException $ex)
            {
                $show_box['form']->invalidate($ex);
            }
        }elseif (!$this->_context->isPOST())
        {
            // 如果不是 POST 提交，则把对象值导入表单
            $show_box['form']->import($db_one);
        }
        $this->_view['show_box'] = $show_box;
        $this->_viewname = 'form';
    }

    /* ******************************************************************** */
    function actionDel()
    {
        $show_box['title'] = '删除角色';
        //echo '<script type="text/javascript">confirm("文本");</script>';
        //删除角色，同时要删除关联表里面的角色定义
        $db_one = Admin_Roles::find('role_id = ?', $this->_context->role_id )->query();
        if ( !$db_one->id() )
        { // 如果用户 ID 无效，则返回
            return $this->_redirect(url('admin::roles/index'));
        }else{
            $sp_roles = Q::ini('appini/sp_role');
            if (in_array($db_one['rolename'],$sp_roles))
            {
                return $this->_redirectMessage(
                    '删除警告',
                    '删除角色 '.$db_one['rolename'].' 时发生错误，因为这是一个受保护的系统角色。',
                    url('admin::roles/index'));
            }else{
                Admin_Roles::meta()->destroyWhere('role_id = ?',$this->_context->role_id);
                return $this->_redirectMessage(
                    '删除成功',
                    '您已经成功从数据库删除了一个角色，并且同时删除了所有绑定关系。',
                    url('admin::roles/index'));
            }
        }
    }

    /* ******************************************************************** */
    function actionBind()
    {//不带分页的bind
        $show_box['title'] = '角色绑定权限';
        // 获取传进参数
        $post_id = intval($this->_context->role_id);
        $post_value = $this->_context->permissions;

        // 查询指定 ID
        $show_box['info'] = $db_one = Admin_Roles::find('role_id = ?', $post_id )->getOne();
        if ( !$show_box['info']['role_id'] )
            { 
                return $this->_redirect(url('admin::roles/index'));
            }
        
        if ($this->_context->isPOST())
            {
                try{
                    $post_value = $this->_context->permissions;
                    if (empty($post_value)) $post_value = '0';
                    $db_one -> willChanged('description');
                    $db_one -> permissions = Admin_Permissions::find("permission_id in (?)",Q::normalize($post_value,","))->getAll();
                    $db_one->save();
                    return $this->_redirect(url('admin::roles/bind',array('role_id'=>$post_id)));
                }
                catch (QValidator_ValidateFailedException $ex)
                {
                    $show_box['form']->invalidate($ex);
                }
            }
        $show_box['permissions'] = array();
        foreach ($show_box['info']->permissions as $one)
            {
                $show_box['permissions'][] = $one->permission_id;
            }
        $this->_view['show_box'] = $show_box;
    }


    
}


